home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 122_01 / pist2b.c < prev    next >
Text File  |  1984-03-05  |  3KB  |  165 lines

  1. /*********************************************************/
  2. /*                             */
  3. /* PISTOL-Portably Implemented Stack Oriented Language     */
  4. /*            Version 2.0             */
  5. /* (C) 1983 by    Ernest E. Bergmann             */
  6. /*        Physics, Building #16             */
  7. /*        Lehigh Univerisity             */
  8. /*        Bethlehem, Pa. 18015             */
  9. /*                             */
  10. /* Permission is hereby granted for all reproduction and */
  11. /* distribution of this material provided this notice is */
  12. /* included.                         */
  13. /*                             */
  14. /*********************************************************/
  15. /* third code module for PISTOL v2.0 in BDS 'C' v1.45a */
  16. /* August 28, 1982 */
  17. #include "bdscio.h"
  18. #include "pistol.h"
  19.  
  20. move()
  21. {/* static char *as,*ad,*endaddr;int nowd; */
  22.     nowd=pop();
  23.     ad=pop();
  24.     as=pop();
  25.     endaddr=as+nowd;
  26.     if((as<&ram[RAMMIN])||(endaddr>&ram[RAMSIZE]))
  27.         merr(readv);
  28.     if((ad<&ram[0])||((ad+nowd)>&ram[RAMSIZE]))
  29.         merr(writv);
  30.     for(;as<=endaddr;++ad,++as) *ad=*as;
  31. }
  32.  
  33.  
  34. char *slit() /* emplaces string lit.,returns ^ to its start */
  35. {/* shared with longstring() static char ic,*sstart; */
  36.     Pc=sstart=ram[3].pc; Pc++;
  37.     *sstart=*ram[3].pc -1;
  38.     Pc++; ram[3].pc++;
  39.     for(ic=*sstart; ic ; Pc++,ram[3].pc++,ic--)
  40.         *ram[3].pc=*Pc ;
  41.     return(sstart);
  42. }
  43.  
  44. swap()
  45. {/* static int hold; */
  46.     hold=stack[stkptr];
  47.     stack[stkptr]=stack[stkptr-1];
  48.     stack[stkptr-1]=hold;
  49. }
  50.  
  51.  
  52. nextch()
  53. {if (*ram[11].pc != NEWLINE) ram[11].pc++ ; }
  54.  
  55.  
  56. prompt()
  57. {if(ram[32].pw) {instr=ram[32].un;interpret();}
  58. else    {if(ram[20].in) carret();
  59.     chout(strings[0]);
  60.     message(&strings[1]);
  61.     chout('>');
  62.     }
  63. }
  64.  
  65.  
  66. ignrblnks()
  67. {    while((*ram[11].pc==9)
  68.         ||(*ram[11].pc==32)) ram[11].pc++ ;
  69. }
  70.  
  71. char *longstring()
  72. {/*shared with slit() static char ic,*sstart; */
  73.     if(*ram[14].pc != '"') abort();
  74.     Pc2=sstart=ram[3].pc; Pc2++;
  75.     ic=0;
  76.     ram[11].pc=ram[14].pc+1;
  77.     while(*ram[11].pc != NEWLINE && *ram[11].pc != '"')
  78.         {ic++; *Pc2=*ram[11].pc; Pc2++; nextch(); }
  79.     nextch();
  80.     *sstart=ic;
  81.     ram[3].pc=Pc2;
  82.     return(sstart);
  83. }
  84.  
  85.  
  86. intoken()
  87. {/* static char count,*ptr2; */
  88.     ptr2=ram[3].pc;
  89.     for(count=0;!white(*ram[11].pc);nextch())
  90.     {    count++ ; ptr2++ ;
  91.         if(ram[13].in) *ptr2=toupper(*ram[11].pc) ;
  92.         else *ptr2 =*ram[11].pc ;
  93.     }
  94.     *ram[3].pc=count ;
  95. }
  96.  
  97. int white(c)    /* better than isspace(c) */
  98. char c;
  99. {    if(c==32) return(TRU);
  100.     if(c==9)  return(TRU);
  101.     if(c==NEWLINE)
  102.           return(TRU);
  103.     return(c==0);
  104. }
  105.  
  106. int digit(d)
  107. char d;
  108. {if(d<='9') return(d-'0');
  109. if(d<'A') return(-1);
  110. if(d<='Z') return(10-'A'+d);
  111. return(-1);
  112. }
  113.  
  114.  
  115. compile(address)
  116. int address;
  117. { if(ram[1].pw >= &ram[RAMSIZE-2]) merr(writv);
  118.  Pw=ram[1].pw++ ; *Pw=address;
  119. }
  120.  
  121.  
  122. fwdref()
  123. { push(ram[1].in); compile(0); }
  124.  
  125.  
  126. char convert(ptkn,base,Pval)
  127. char *ptkn,base;
  128. int *Pval;
  129. {char *tend;
  130.  int sign,val,d;
  131.     val=0; sign=1; tend=*ptkn + ptkn +1;
  132.     ptkn++ ;
  133.     if(*ptkn=='+') ptkn++;
  134.     else if(*ptkn=='-'){ptkn++; sign=-1;}
  135.     d=digit(*ptkn);
  136.     while((d>-1)&&(ptkn<tend)&&(d<base))
  137.     {    val=base*val+d;
  138.         ptkn++;d=digit(*ptkn);
  139.     }
  140.     *Pval=sign*val;
  141.     if(ptkn==tend) return(TRU);
  142.     else return(FALS);
  143. }
  144.  
  145.  
  146. touchup()
  147. {/* static int ref; */
  148.     Pw=ref=pop(); *Pw=ram[1].in-ref; }
  149.  
  150.  
  151. permstrings()
  152. {    if(ram[4].pc<ram[3].pc) ram[4].pc=ram[3].pc;
  153. }
  154.  
  155.  
  156. fname(name)    /*name[length]=0 for 'C'*/
  157. char name[NAMESIZE];
  158. {    Pc=pop();
  159.     if((Pc<&strings)||(Pc>&strings[STRINGSSIZE-NAMESIZE]))
  160.         merr(readv);
  161.     if(*Pc>=NAMESIZE) merr(writv);
  162.     movmem(1+Pc,name,*Pc); name[*Pc]='\0';
  163. }
  164.  
  165. ') return(d-'0');